#include "cachePPD.h"

t_elemCache *busquedaBinaria(t_elemCache *elemento, t_list *tablaCache)
{
  int posMayor = collection_list_size(tablaCache);
  int posMenor = 0;
  int centro;
  t_elemCache* peticionLista;
  while (posMenor <= posMayor){
      centro = (posMayor + posMenor)/2;
      peticionLista = (t_elemCache*)collection_list_get(tablaCache,centro);
      if (peticionLista->nroSector == elemento->nroSector){
    	  break;
      }else if (elemento->nroSector < peticionLista->nroSector){
		posMayor = centro-1;
      }else if (elemento->nroSector > peticionLista->nroSector) {
		posMenor = centro+1;
      }else {
    	  peticionLista = NULL;
      }
    }

  return peticionLista;
}

void insertar_ReemplazarOrdenado(t_elemCache *elemento, t_list *tablaCache){
	int cant = 0;
	t_elemCache* peticionLista;
	t_config *config = getConfig();

	while (cant <= collection_list_size(tablaCache)){
		peticionLista = (t_elemCache*)collection_list_get(tablaCache,cant);
		if (elemento->nroSector < peticionLista->nroSector){

			if(collection_list_size(tablaCache) == config->tamCache){
				collection_list_remove(tablaCache,cant);
				collection_list_put(tablaCache,cant,elemento);
			}else{
				mover_agregarlista(tablaCache,elemento,cant);
			}
		}else{
			cant++;
		}
	}
}
void mover_agregarlista(t_list * list,void* elemento,int pos){
	t_elemCache *elementAux;
	t_elemCache *elementAct;

	elementAct = (t_elemCache*)collection_list_get(list,pos);
	elementAux = (t_elemCache*)collection_list_get(list,pos++);

	while (elementAct != NULL){
		collection_list_put(list,pos,elemento);
		elemento = elementAux;
		pos++;
		elementAct = (t_elemCache*)collection_list_get(list,pos);
		elementAux = (t_elemCache*)collection_list_get(list,pos++);
	}
}
